昨天我們介紹了在 Go 語言中各種變數宣告與更改變數值的方式,但我們有了變數之後,會需要對變數做一些操作,於是乎這就是算符 (operators) 出場的好時機啦!
算符是在執行程式時,需要將資料做比較或是數學邏輯運算時會用到的東西,最簡單的例子就是:加、減、乘、除或是比較兩者的大小等等。
Go 語言中 算符分為以上六種,接下來我就一一簡單介紹各種算符吧!
算數算符是我們最熟悉常見的四則運算,以下列出最常遇到的算符符號所代表的意義。
符號 | 解釋 |
---|---|
+ | 相加 |
- | 相減 |
* | 相乘 |
/ | 相除 |
% | 餘數 |
+= | =左數加右數 |
-= | =左數減右數 |
++ | 遞增加一 |
-- | 遞減減一 |
也有人稱為 關係運算符,用來比較兩個值,看兩者是否相等或是誰大誰小。
符號 | 解釋 |
---|---|
== | 檢查兩個值是否相等,回傳 True . False |
!= | 檢查兩個值是否不相等,回傳 True . False |
> | 檢查左邊值是否大於右邊值,回傳 True . False |
< | 檢查左邊值是否小於右邊值,回傳 True . False |
>= | 檢查左邊值是否大於或等於右邊值,回傳 True . False |
<= | 檢查左邊值是否小於或等於右邊值,回傳 True . False |
判斷兩個布林值是否皆為真或是其一為真以及反轉布林值的值。
符號 | 解釋 |
---|---|
&& | AND 兩者皆須為 True |
|| | OR 兩者其一為 True |
! | 反轉布林值,若為 True ,則變成 False ,若為 False ,則變成 True |
目前只需要先知道定址算符是專門用來處理指標 (pointers) 的一種算符,後面介紹到指標時,會有詳細的介紹。
位元算符是對整數的二進位制作操作,現實生活中運用到的機會也比較少見,這邊就不多贅述啦!
受理算符是用來對 Go 語言中通道 (Channel) 寫入值或是讀取值時的一種算符,一樣後面章節會有詳細介紹。
以下舉例為算數算符、比較算符、邏輯算符三者最常見的算符舉例:
範例 1:
package main
import (
"fmt"
)
func main() {
var apple int = 10
var peach int = 25
var total int = 2 * apple + 4 * peach
fmt.Println("2顆蘋果+3顆桃子=", total )
total = (total - 10) / 2
fmt.Println("折抵10元後,2人平分,1個人金額為=", total )
total += apple // 也可以打成 total = total + apple
fmt.Println("小明想再多買一顆蘋果=", total )
appleCount := 2
appleCount++
fmt.Println("蘋果本來2顆,小明多買一顆蘋果後變", appleCount )
if peach > apple { //如果桃子價格大於蘋果價格,則回傳 True ,即可順利執行 function 內函式
fmt.Println("桃子比蘋果貴")
}
if total % 10 == 5 && total > apple + peach {
fmt.Println("小明購買的桃子數量一定為奇數,且他不只買一顆水果")
}
}
範例 1(執行結果):
2顆蘋果+3顆桃子= 120
折抵10元後,2人平分,1個人金額為= 55
小明想再多買一顆蘋果= 65
蘋果本來2顆,小明多買一顆蘋果後變 3
桃子比蘋果貴
小明購買的桃子數量一定為奇數,且他不只買一顆水果
算符這個名字第一次聽到總覺得很困難,但了解過後,可以先將其簡單看待為四則與算以及比值的大小,基本上使用頻率極高,有時甚至連自己在使用都沒發現呢!
剛剛前面有介紹到算符可以比較值的大小,昨天的文章也有介紹到變數各種宣告方法,其中一個就是可以省略初始值的宣告方法,而這時就是 零值(zero values) 出場的好時機啦!
零值 (zero values) 是指該型別的 預設值 或是 空值 ,以下介紹幾個常用型別的零值,及練習印出零值。
型別 | 零值 |
---|---|
bool(布林值) | false |
int.float32(整數.浮點數) | 0 |
string(字串) | "" (空字串) |
指標(pointers)、函式(function)、介面(interface)、切片(slice)、通道(channel)及映射表(map) | nil |
範例 2:
package main
import (
"fmt"
"time"
)
func main(){
var isClicked bool
fmt.Println("isClicked:",isClicked)
var apple int
fmt.Println("Count:", apple)
var temperature float32
fmt.Println("temperature:",temperature)
var myName string
fmt.Println("myName:",myName)
var dateTime time.Time
fmt.Println("DateTime:" ,dateTime)
fmt.Printf("DateTime: %#v \n" ,dateTime)
}
範例 2(執行結果):
isClicked: false
Count: 0
temperature: 0
myName:
DateTime: 0001-01-01 00:00:00 +0000 UTC
DateTime: time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC)
不知道大家看完範例二最後兩行程式碼,有沒有跟我有一樣的疑問 Println
跟 Printf
差別在哪呢? %#v \n
這串亂碼又是什麼? 為什麼兩者執行結果不同呢? 以下來簡單介紹兩者差異
在網路上與書上查都可以看到他們說, fmt.Printf() 是一種格式化輸出、格式化樣板語言, 恩恩恩所以是什麼意思還是不懂
簡單翻譯成 Printf 可以使用一些特殊符號,來將你想印出的值,用符號所代表的方式來顯示,而 Println 則是單純印出值,無法選擇想要呈現的格式。
以下來介紹幾種常見的格式化符號所代表的意思:
符號(就是那串你以為的亂碼) | 格式化結果呈現 |
---|---|
%v | 單純印出值 |
%+v | 印出值+欄位名稱 |
%#v | 印出值+欄位名稱+型別名稱 |
%T | 印出值的型別 |
%t | 印出布林值(true/false) |
%d | 印出10進位數字 |
%s | 印出字串 |
%% | 印出%符號 |
補充:
" "雙引號 內可使用跳脫字元 \t \n (翻成白話就是告訴程式,我前面的並不是單純的字串喔!)
``重音符內則保留原始字串(翻成白話就是即便我加上 \n ,也會解析成一般字串)
綜合以上介紹我們再去看看範例 2 有疑問的兩行程式碼:
範例 2-1:
package main
import (
"fmt"
"time"
)
func main(){
//...中間省略
var dateTime time.Time
fmt.Println("DateTime:" ,dateTime) // 單純印出零值
fmt.Printf("DateTime: %#v \n" ,dateTime) // 印出值+欄位名稱+型別名稱
}
範例 2-1(執行結果):
//...中間省略
DateTime: 0001-01-01 00:00:00 +0000 UTC // 單純印出
DateTime: time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC)
今天介紹了算符 (operators) 及零值 (zero values) 那明天我們繼續介紹 Go 語言中的 值 與 指標(pointers) ,那我們明天見!